package com.example.mvvm.base.vm;

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.lifecycle.ViewModel;

import com.example.mvvm.base.vm.action.FrameWorkModel;
import com.example.mvvm.base.vm.action.UIChangeObservable;
import com.example.mvvm.base.vm.action.ViewModelLife;
import com.example.mvvm.base.vm.action.ViewModelRx;
import com.example.mvvm.until.LogUtils;

import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import sion.my.netmanger2.enums.NetMode;

/**
 * #FrameWorkModel#这里主要处理与activity之间的交互
 */
public abstract class BaseViewModel extends ViewModel implements ViewModelLife, ViewModelRx {

    //管理activity事件传递
    private FrameWorkModel frameWorkModel;
    //管理RxJava，主要针对RxJava异步操作造成的内存泄漏
    private CompositeDisposable mCompositeDisposable;
    //管理Ui事件传递
    private UIChangeObservable ui;


    public FrameWorkModel getContext() {
        if (frameWorkModel == null) {
            frameWorkModel = new FrameWorkModel();
        }
        return frameWorkModel;
    }

    public UIChangeObservable getUi() {
        if (ui == null) {
            ui = new UIChangeObservable();
        }
        return ui;
    }

    /**
     * 添加事件
     */
    @Override
    public void addSubscribe(Disposable disposable) {
        if (mCompositeDisposable == null) {
            mCompositeDisposable = new CompositeDisposable();
        }
        mCompositeDisposable.add(disposable);
    }

    /**
     * 销毁事件
     */
    @Override
    public void removeEvent() {
        if (mCompositeDisposable != null) {
            mCompositeDisposable.clear();
        }
    }

    /**
     * 请大家在这里注册事件
     */
    @Override
    public void registerRxBus() {
        LogUtils.d("registerRxBus");
    }


    /**
     * 初始化
     */
    public void initViewModel() {
        registerRxBus();
    }



    /**
     * 重启
     */
    public void onResume() {
    }

    ;

    /**
     * 销毁
     */
    @Override
    public void onDestroy() {
        removeEvent();
    }

    ;

    /**
     * 暂停
     */
    public void onPause() {
    }

    ;

    /**
     * 网络状态改变
     */
    public void netWorkChange(NetMode netWorkEvent) {
    }

    /**
     * 开始
     */
    public void onStart() {
    }

    ;

    /**
     * 停止
     */
    public void onStop() {
    }

}
